--用来添加动作，绑定在组件上（即有对应的组件才会载入这个动作）
--使用方法：直接复制到modmain环境，然后根据需求填写对应的参数

local CHANGE = Action({ priority = 1 })--定义动作类，priority属性代表动作优先级，数字越大优先级越高
CHANGE.id = "CHANGE"--动作ID，用于在状态机中识别动作
CHANGE.str = "切换形态"--动作名称，显示出来的动作名称
CHANGE.fn = function(act)--动作的执行函数，也就是触发动作后执行的逻辑
    local doer = act.doer--获取执行动作的实体
    local obj = act.invobject--获取执行动作的物品
    if doer and obj and doer:IsValid() and obj:IsValid() and obj.components.change then
        return obj.components.change:DoTF(doer)
    end
    return false,'Already_Upgraded' --一定要记得return，成功了return true，失败了return false，否则会出现动作成功了，人物语音提示‘我无法做到’，false后面的参数是字符串，代表失败原因，人物会直接说出这个字符串
end
AddAction(CHANGE)--添加动作

AddComponentAction("INVENTORY", "change",--将动作绑定到组件上，第一个参数代表动作场景，用于 PlayerActionPicker收集动作
    function(inst, doer, actions, right)--动作显示的测试函数，决定玩家是否能看到这个动作
        if inst and inst.replica.equippable and inst.replica.equippable:IsEquipped() then--注意这个函数的执行环境是主客机都要执行，所以写的时候要考虑到客机能否执行，否则表现在游戏里就会卡动作
            table.insert(actions, ACTIONS.CHANGE)
        end
    end)

AddStategraphActionHandler("wilson",ActionHandler(ACTIONS.CHANGE, "give"))--添加动作到状态机，决定人物执行动作时播放的动画
AddStategraphActionHandler("wilson_client",ActionHandler(ACTIONS.CHANGE, "give"))--添加动作到客机的状态机，决定人物执行动作时播放的动画
STRINGS.CHARACTERS.GENERIC.ACTIONFAIL.UPUP = {--将失败原因中文化，其实在return false之后可以直接写中文字符串，但是为了方便管理，还是建议写成这样
    Already_Upgraded = '该物品已经升级过了！'
}





